package com.zhuiyun.educations.api.newCourse.service;

import com.zhuiyun.educations.api.newCourse.entity.CourseInfo;
import com.zhuiyun.educations.api.newCourse.entity.CourseUnit;
import com.zhuiyun.educations.api.newCourse.entity.DTO.CourseDTO;
import com.zhuiyun.educations.api.newCourse.entity.UnitJoint;
import com.zhuiyun.educations.common.response.CommonResult;
import com.zhuiyun.educations.util.pageUtil.PageRequest;
import com.zhuiyun.educations.util.pageUtil.PageResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @ClassName ICourseService
 * @Description TODO 课程后端业务逻辑层
 * @Author 杨友朋
 * @Date 2023/6/28 16:54
 **/
public interface ICourseService {

    /**
     * @Author 杨友朋
     * @Description TODO 全查课程
     * @Date 2023/6/19 14:49
     * @Return PageResult
     * @param courseDTO,pageRequest
     */
    PageResult selectCourse(CourseDTO courseDTO, PageRequest pageRequest);

    /**
     * @Author 杨友朋
     * @Description TODO 全查课程(pc端)
     * @Date 2023/6/19 14:49
     * @Return PageResult
     * @param courseDTO,pageRequest
     */
    PageResult selectCoursePc(CourseDTO courseDTO, PageRequest pageRequest);

    /**
     * @Author 杨友朋
     * @Description TODO 全查科目
     * @Date 2023/6/19 14:49
     * @Return PageResult
     * @param courseDTO,pageRequest
     */
    PageResult selectUnit(CourseDTO courseDTO, PageRequest pageRequest);

    /**
     * @Author 杨友朋
     * @Description TODO 全查详细课程
     * @Date 2023/6/19 14:49
     * @Return PageResult
     * @param courseDTO,pageRequest
     */
    PageResult selectJoint(CourseDTO courseDTO, PageRequest pageRequest);

    /**
     * @Author 杨友朋
     * @Description TODO 添加章节
     * @Date 2023/6/29 9:58
     * @Return CommonResult
     * @param courseUnit
     */
    CommonResult insertUnit(CourseUnit courseUnit);

    /**
     * @Author 杨友朋
     * @Description TODO 添加详细课程
     * @Date 2023/6/29 9:59
     * @Return CommonResult
     * @param unitJoint
     */
    CommonResult insertJoint(UnitJoint unitJoint);

    /**
     * @Author 杨友朋
     * @Description TODO 添加课程信息
     * @Date 2023/6/29 9:59
     * @Return CommonResult
     * @param imageFile,courseDTO
     */
    CommonResult insertCourse(MultipartFile imageFile, CourseDTO courseDTO);

    /**
    * @Author 杨友朋
    * @Description TODO 根据id修改课程信息
    * @Date 2023/6/29 14:06
    * @Return CommonResult
    * @param imageFile,courseDTO
    */

    CommonResult updateCourseById(MultipartFile imageFile, CourseInfo courseInfo);

    /**
    * @Author 杨友朋
    * @Description TODO 根据id删除课程
    * @Date 2023/6/30 9:04
    * @Return CommonResult
    * @param id
    */
    CommonResult delById(Integer id);

    /**
    * @Author 杨友朋
    * @Description TODO 根据ids批量删除
    * @Date 2023/6/30 9:05
    * @Return CommonResult
    * @param ids
    */
    CommonResult delByIds(List<Integer> ids);

    /**
    * @Author 杨友朋
    * @Description TODO 根据id修改课程状态
    * @Date 2023/6/30 9:41
    * @Return CommonResult
    * @param courseInfo
    */
    CommonResult upStatusById(CourseInfo courseInfo);

    /**
    * @Author 杨友朋
    * @Description TODO 批量上架
    * @Date 2023/6/30 10:50
    * @Return CommonResult
    * @param ids
    */
    CommonResult onShelf(List<Integer> ids);

    /**
    * @Author 杨友朋
    * @Description TODO 批量下架
    * @Date 2023/6/30 10:51
    * @Return CommonResult
    * @param ids
    */
    CommonResult offShelf(List<Integer> ids);

    CommonResult delUnitById(Integer id);

    CommonResult delOneById(Integer id);

    CommonResult upSwitch(UnitJoint unitJoint);

    CommonResult upJoint(UnitJoint unitJoint);

    List<CourseInfo> selectAll();

    List<CourseDTO> selectCountByTeacher();

    List<CourseDTO> selectCountBySubject();
}
